package 力扣;

/**
 实现 int sqrt(int x) 函数。

 计算并返回 x 的平方根，其中 x 是非负整数。

 由于返回类型是整数，结果只保留整数的部分，小数部分将被舍去。
 示例 1:
 输入: 4
 输出: 2
 示例 2:

 输入: 8
 输出: 2
 说明: 8 的平方根是 2.82842...,
      由于返回类型是整数，小数部分将被舍去。
 */
public class _69x的平方根 {
    public int mySqrt(int x) {

        int left =0;
        int right = x;

        while( left < right ){
           // 这里为什么使用的是 (left + right + 1) >>> 1 ， 而不是跟之前一样使用 (left + right) >>> 1 ？
           // 因为我们下面需要的是 right = mid - 1 而不是 left = mid + 1，如果 (left + right) >>> 1 的话 left = mid 可能会造成死循环
            int mid = (left+right+1) >>1;
            if( mid* mid > x){
                right  = mid-1;
            }else{
                left =mid;
            }
        }
        return  left;
    }
}
